package com.kang.helloword;

import com.kang.utils.RabbitMQUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MessageProperties;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeoutException;

/**
 * 可适用于登陆注册等功能
 */
public class Provider {

    //生产消息
    public static void main(String[] args) throws IOException, TimeoutException {
        //通过工具类获取连接对象
        Connection connection = RabbitMQUtils.getConnection();
        //获取连接中通道
        Channel channel = connection.createChannel();
        //通道绑定对应的消息队列
        //参数1：队列名称   如果队列不存在，自动创建
        //参数2：用来定义队列特性是否持久化     true:持久化队列  false:不持久化队列
        //参数3：是否独占队列    true:独占队列   false:不独占队列
        //参数4：是否在消费完成后自动删除队列    true:自动删除队列   false:不自动删除队列
        //参数5：额外附加参数
        Map map = new HashMap<>();
        //最大只能接受100条消息
        map.put("x-max-length", 100);
        //溢出规则  意思是接前一部分消息还是接后一部分消息
        map.put("x-overflow", "reject-publish");
        //自动过期   多长时间未使用，就自动过期
        map.put("x-expires", 1000 * 5);
        //最大的字节长度   超过100个字节，该消息不会进入队列
        map.put("x-max-length-bytes", 100);
        channel.queueDeclare("hello", false, false, false, map);

        //发布消息
        //参数1：交换机名称
        //参数2：队列名称
        //参数3：传递消息的额外设置
        //参数4：消息的具体内容
        // MessageProperties.PERSISTENT_TEXT_PLAIN   消息持久化
        channel.basicPublish("", "hello", MessageProperties.PERSISTENT_TEXT_PLAIN, "hello rabbitmq".getBytes());

        //释放资源
        RabbitMQUtils.closeConnectionAndChanel(channel, connection);
    }
}
